<?php
declare(strict_types=1);

namespace App\Traits;

/**
 * Trait PagingTrait 分页处理
 *
 * @package App\Traits
 */
trait PagingTrait
{
    /**
     * 计算分页总数
     *
     * @param int $total     总记录数
     * @param int $page_size 分页大小
     * @return int 分页总数
     */
    protected function getPagingTotal(int $total, int $page_size): int
    {
        return ($total === 0) ? 0 : (int)ceil($total / $page_size);
    }

    /**
     * 获取分页数据
     *
     * @param array $rows      列表数据
     * @param int   $total     数据总记录数
     * @param int   $page      当前分页
     * @param int   $page_size 分页大小
     * @param array $params    额外参数
     * @return array
     */
    protected function getPagingRows(array $rows, int $total, int $page, int $page_size, array $params = []): array
    {
        return array_merge([
            'rows'       => $rows,
            'page'       => $page,
            'page_size'  => $page_size,
            'page_total' => ($page_size == 0) ? 1 : $this->getPagingTotal($total, $page_size),
            'total'      => $total,
        ], $params);
    }
}
